/**
 * 简单的日期工具函数示例
 * 直接使用 dayjs 进行日期处理
 */

import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import relativeTime from 'dayjs/plugin/relativeTime';
import isBetween from 'dayjs/plugin/isBetween';

// 设置dayjs插件和本地化
dayjs.extend(relativeTime);
dayjs.extend(isBetween);
dayjs.locale('zh-cn');

/**
 * 格式化日期为 'YYYY-MM-DD'
 * @param value 日期
 */
export function formatDate(value: Date | string): string {
  if (!value) return '';
  return dayjs(value).format('YYYY-MM-DD');
}

/**
 * 格式化日期时间为 'YYYY-MM-DD HH:mm:ss'
 * @param value 日期时间
 */
export function formatDateTime(value: Date | string): string {
  if (!value) return '';
  return dayjs(value).format('YYYY-MM-DD HH:mm:ss');
}

/**
 * 获取相对时间（如：2小时前、3天后）
 * @param value 日期
 */
export function getRelativeTime(value: Date | string): string {
  if (!value) return '';
  return dayjs(value).fromNow();
}

/**
 * 判断日期是否在指定范围内
 * @param date 要检查的日期
 * @param startDate 开始日期
 * @param endDate 结束日期
 */
export function isDateBetween(
  date: Date | string,
  startDate: Date | string,
  endDate: Date | string,
): boolean {
  if (!date || !startDate || !endDate) return false;
  return dayjs(date).isBetween(startDate, endDate, 'day', '[]');
}

/**
 * 计算两个日期之间的天数差
 * @param startDate 开始日期
 * @param endDate 结束日期
 */
export function getDaysBetween(startDate: Date | string, endDate: Date | string): number {
  if (!startDate || !endDate) return 0;
  return Math.abs(dayjs(endDate).diff(dayjs(startDate), 'day'));
}

/**
 * 添加天数
 * @param value 日期
 * @param days 要添加的天数
 */
export function addDays(value: Date | string, days: number): Date {
  return dayjs(value).add(days, 'day').toDate();
}

/**
 * 获取当前日期
 */
export function today(): Date {
  return dayjs().toDate();
}

/**
 * 获取当前日期字符串 'YYYY-MM-DD'
 */
export function todayString(): string {
  return dayjs().format('YYYY-MM-DD');
}